gusucode.com > VC++ 汽配销售管理系统(Access)源码程序 > VC++ 汽配销售管理系统(Access)源码程序/源码/MyView.cpp
//Download by http://www.NewXing.com // htglxtView.cpp : implementation of the CHtglxtView class // #include "stdafx.h" #include "qpglxt.h" #include "MyDoc.h" #include "MyView.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CHtglxtView IMPLEMENT_DYNCREATE(CMyView, CScrollView) BEGIN_MESSAGE_MAP(CMyView, CScrollView) //{{AFX_MSG_MAP(CHtglxtView) // NOTE - the ClassWizard will add and remove mapping macros here. // DO NOT EDIT what you see in these blocks of generated code! //}}AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CHtglxtView construction/destruction CMyView::CMyView() { // TODO: add construction code here m_pos.cx=0; m_pos.cy=0; PageRow[1]=0; } CMyView::~CMyView() { Deffont.DeleteObject(); } BOOL CMyView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return CScrollView::PreCreateWindow(cs); } ///////////////////////////////////////////////////////////////////////////// // CHtglxtView drawing void CMyView::OnDraw(CDC* pDC) { CMyDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); //逻辑设备大小 LogicSize.cx=pDC->GetDeviceCaps(HORZRES); LogicSize.cy=pDC->GetDeviceCaps(VERTRES); //画主标题 PrintMainCaption(pDC,false); //画副标题 PrintDeckCaption(pDC,false); //画表头 LVCOLUMN col; CString stext; int wid,xpos,ypos; xpos=30; ypos=m_pos.cy; pDC->Rectangle(30,ypos,LogicSize.cx-30,ypos+1); ypos=ypos+10; for(int i=0;i<m_ps.Grid->GetCols();i++) { col.mask=LVCF_TEXT; col.pszText=stext.GetBuffer(stext.GetLength()); col.cchTextMax=255; m_ps.Grid->GetColumn(i,&col); wid=m_ps.Grid->GetColumnWidth(i); pDC->TextOut(xpos,ypos,col.pszText); xpos=xpos+wid; } ypos=ypos+ 20;//m_pos向下移动一个字的宽度 pDC->Rectangle(30,ypos,LogicSize.cx-30,ypos+1); //画表格内容 ypos=ypos+10; xpos=30; for(int r=0;r<m_ps.Grid->GetRows();r++) { for(int c=0;c<m_ps.Grid->GetCols();c++) { stext=m_ps.Grid->GetItemText(r,c); wid=m_ps.Grid->GetColumnWidth(c); pDC->TextOut(xpos,ypos,stext); xpos=xpos+wid; } xpos=30; ypos=ypos+20; m_pos.cx=30; m_pos.cy=ypos; } //打印合计信息 pDC->Rectangle(30,ypos,LogicSize.cx-30,ypos+1); PrintTotal(pDC, false); // TODO: add draw code for native data here } void CMyView::OnInitialUpdate() { CScrollView::OnInitialUpdate(); CSize sizeTotal; // TODO: calculate the total size of this view CDC* pDC; pDC=this->GetDC(); //逻辑设备大小 LogicSize.cx=pDC->GetDeviceCaps(HORZRES); LogicSize.cy=pDC->GetDeviceCaps(VERTRES); sizeTotal.cx=100; GridWidth=0; for(int i=0;i<m_ps.Grid->GetCols();i++) { GridWidth=GridWidth+m_ps.Grid->GetColumnWidth(i); } sizeTotal.cy=m_ps.Grid->GetRows()*24+200; sizeTotal.cx=GridWidth; SetScrollSizes(MM_TEXT, sizeTotal); } ///////////////////////////////////////////////////////////////////////////// // CHtglxtView printing BOOL CMyView::OnPreparePrinting(CPrintInfo* pInfo) { //宽度比率 m_Info=pInfo; return DoPreparePrinting(pInfo); } void CMyView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo) { LPDEVMODE mode; mode=pInfo->m_pPD->GetDevMode(); //打印纸大小 PageSize.cx=mode->dmPaperLength; PageSize.cy=mode->dmPaperWidth; //逻辑设备大小 LogicSize.cx=pDC->GetDeviceCaps(HORZRES); LogicSize.cy=pDC->GetDeviceCaps(VERTRES); //比率 Ratio.x=(float)LogicSize.cx/(float)PageSize.cx; Ratio.y=(float)LogicSize.cy/(float)PageSize.cy; //打印页数 pInfo->SetMaxPage(GridWidth*20*Ratio.x/LogicSize.cx-1); Deffont.CreatePointFont(280*Ratio.x,"宋体",NULL); } void CMyView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add cleanup after printing } ///////////////////////////////////////////////////////////////////////////// // CHtglxtView diagnostics #ifdef _DEBUG void CMyView::AssertValid() const { CScrollView::AssertValid(); } void CMyView::Dump(CDumpContext& dc) const { CScrollView::Dump(dc); } CMyDoc* CMyView::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDoc))); return (CMyDoc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CHtglxtView message handlers void CMyView::OnPrint(CDC* pDC, CPrintInfo* pInfo) { //逻辑设备大小 LogicSize.cx=pDC->GetDeviceCaps(HORZRES); LogicSize.cy=pDC->GetDeviceCaps(VERTRES); //宽度比率 WidthRatio=LogicSize.cx/GridWidth; //画边框 pDC->Rectangle(10*Ratio.x,10*Ratio.y,LogicSize.cx-(10*Ratio.x),LogicSize.cy-(10*Ratio.y)); if(pInfo->m_nCurPage==1) { //画主标题 PrintMainCaption(pDC); //画副标题 PrintDeckCaption(pDC); //画表头 PrintGridHead(pDC); //画表格 PrintGridCell(pDC,pInfo); } else { //画表头 PrintGridHead(pDC); PrintGridCell(pDC,pInfo); } PrintPage(pDC,pInfo); //CScrollView::OnPrint(pDC, pInfo); } void CMyView::PrintMainCaption(CDC *pDC,bool bRatio) { //是否自动根据分辨率调整位置 RatioStruct rRatio; rRatio.x=0.5; rRatio.y=0.5; if(bRatio==true) rRatio=Ratio; //逻辑设备大小 LogicSize.cx=pDC->GetDeviceCaps(HORZRES); LogicSize.cy=pDC->GetDeviceCaps(VERTRES); CFont Mainfont; Mainfont.CreatePointFont(m_ps.MainCaptionFontSize*rRatio.y,"黑体",NULL); pDC->SelectObject(&Mainfont); CRect rect(10*rRatio.x,10*rRatio.y,LogicSize.cx-(10*rRatio.x),m_ps.MainCaptionFontSize/4*rRatio.y+(10*rRatio.y)); pDC->DrawText(m_ps.MainCaption,&rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE); m_pos.cy=m_ps.MainCaptionFontSize/4*rRatio.y+(10*rRatio.y); Mainfont.DeleteObject(); } void CMyView::PrintDeckCaption(CDC* pDC,bool bRatio) { //是否自动根据分辨率调整位置 RatioStruct rRatio; rRatio.x=0.5; rRatio.y=0.5; if(bRatio==true) rRatio=Ratio; //逻辑设备大小 LogicSize.cx=pDC->GetDeviceCaps(HORZRES); LogicSize.cy=pDC->GetDeviceCaps(VERTRES); CFont Deckfont; Deckfont.CreatePointFont(m_ps.DeckCaptionFontSize*rRatio.y,"宋体",NULL); pDC->SelectObject(&Deckfont); CRect rect; for(int i=0;i<m_ps.DeckCaptionNumber;i++) { m_pos.cy=m_pos.cy+(m_ps.DeckCaptionFontSize/5)*rRatio.y; pDC->TextOut(50*rRatio.x,m_pos.cy,m_ps.DeckCaptions[i]); } m_pos.cy=m_pos.cy+(m_ps.DeckCaptionFontSize/5)*rRatio.y; Deckfont.DeleteObject(); } void CMyView::PrintGridHead(CDC *pDC,bool bRatio) { //是否自动根据分辨率调整位置 RatioStruct rRatio; rRatio.x=0.5; rRatio.y=0.5; if(bRatio==true) rRatio=Ratio; pDC->SelectObject(&Deffont); //逻辑设备大小 LogicSize.cx=pDC->GetDeviceCaps(HORZRES); LogicSize.cy=pDC->GetDeviceCaps(VERTRES); //画线 pDC->Rectangle(50*rRatio.x,m_pos.cy,LogicSize.cx-(50*rRatio.x),m_pos.cy+2*rRatio.y); //画表头 LVCOLUMN col; CString stext; m_pos.cx=50*rRatio.x; int wid; m_pos.cy=m_pos.cy+10*rRatio.y; for(int i=0;i<m_ps.Grid->GetCols();i++) { col.mask=LVCF_TEXT; col.pszText=stext.GetBuffer(stext.GetLength()); col.cchTextMax=255; m_ps.Grid->GetColumn(i,&col); wid=m_ps.Grid->GetColumnWidth(i)*WidthRatio; pDC->TextOut(m_pos.cx,m_pos.cy,col.pszText); m_pos.cx=m_pos.cx+wid; } m_pos.cy=m_pos.cy+38*rRatio.y;//m_pos向下移动一个字的宽度 //画线 pDC->Rectangle(50*rRatio.x,m_pos.cy,LogicSize.cx-(50*rRatio.x),m_pos.cy+2*rRatio.y); m_pos.cy=m_pos.cy+ 10*rRatio.y;////m_pos向下移动一条线的宽度 Deffont.DeleteObject(); } void CMyView::PrintGridCell(CDC *pDC,CPrintInfo* pInfo,bool bRatio) { //是否自动根据分辨率调整位置 RatioStruct rRatio; rRatio.x=0.5; rRatio.y=0.5; if(bRatio==true) rRatio=Ratio; pDC->SelectObject(&Deffont); //逻辑设备大小 LogicSize.cx=pDC->GetDeviceCaps(HORZRES); LogicSize.cy=pDC->GetDeviceCaps(VERTRES); //画表格 m_pos.cx=50*rRatio.x; int wid; CString stext; if(pInfo->m_nCurPage!=1) { m_pos.cx=50*rRatio.x; m_pos.cy=100*rRatio.y; } for(int r=PageRow[pInfo->m_nCurPage];r<m_ps.Grid->GetRows();r++) { for(int c=0;c<m_ps.Grid->GetCols();c++) { stext=m_ps.Grid->GetItemText(r,c); wid=m_ps.Grid->GetColumnWidth(c)*WidthRatio; pDC->TextOut(m_pos.cx,m_pos.cy,stext); m_pos.cx=m_pos.cx+wid; } m_pos.cx=50*rRatio.x; m_pos.cy=m_pos.cy+40*rRatio.y;//m_pos向下移动一个字的宽度 if(m_pos.cy+(100*rRatio.y)>LogicSize.cy) { pDC->Rectangle(50*rRatio.x,m_pos.cy,LogicSize.cx-(50*rRatio.x),m_pos.cy+2*rRatio.y); PageRow[pInfo->m_nCurPage+1]=r+1; m_pos.cx=50*rRatio.x; m_pos.cy=40*rRatio.y; break; } } if(r==m_ps.Grid->GetRows()) { //画线 pDC->Rectangle( m_pos.cx,m_pos.cy,LogicSize.cx-(50*rRatio.x),m_pos.cy+2*rRatio.y); //画合计信息 PrintTotal(pDC,bRatio); } m_pos.cx=50*rRatio.x; m_pos.cy=40*rRatio.y; Deffont.DeleteObject(); } void CMyView::PrintPage(CDC *pDC,CPrintInfo* pInfo,bool bRatio) { pDC->SelectObject(&Deffont); //是否自动根据分辨率调整位置 RatioStruct rRatio; rRatio.x=0.5; rRatio.y=0.5; if(bRatio==true) rRatio=Ratio; //逻辑设备大小 LogicSize.cx=pDC->GetDeviceCaps(HORZRES); LogicSize.cy=pDC->GetDeviceCaps(VERTRES); CString stext; stext.Format("第%d页",pInfo->m_nCurPage); CRect rect(0,LogicSize.cy-(100*rRatio.x),LogicSize.cx,LogicSize.cy); pDC->DrawText(stext,&rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE); Deffont.DeleteObject(); } void CMyView::PrintTotal(CDC *pDC, bool bRatio) { //是否自动根据分辨率调整位置 RatioStruct rRatio; rRatio.x=0.5; rRatio.y=0.5; if(bRatio==true) rRatio=Ratio; //逻辑设备大小 LogicSize.cx=pDC->GetDeviceCaps(HORZRES); LogicSize.cy=pDC->GetDeviceCaps(VERTRES); CFont Deckfont; Deckfont.CreatePointFont(m_ps.DeckCaptionFontSize*rRatio.y,"宋体",NULL); pDC->SelectObject(&Deckfont); CRect rect; if(m_ps.TotalNumber%2!=0) m_ps.TotalNumber=m_ps.TotalNumber+1; for(int i=0;i<m_ps.TotalNumber;i=i+2) { m_pos.cy=m_pos.cy+(m_ps.DeckCaptionFontSize/5)*rRatio.y; pDC->TextOut(50*rRatio.x,m_pos.cy,m_ps.Totals[i]); pDC->TextOut(LogicSize.cx/2,m_pos.cy,m_ps.Totals[i+1]); } m_pos.cy=m_pos.cy+(m_ps.DeckCaptionFontSize/5)*rRatio.y; Deckfont.DeleteObject(); }